package main

/**
编写一个程序，找出第 n 个丑数。
丑数就是质因数只包含 2, 3, 5 的正整数。

示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
*/
func nthUglyNumber(n int) int {
	//data := []int{1, 2, 3, 4, 5}
	data := make([]int, n)
	data[0] = 1
	a, b, c := 0, 0, 0
	for i := 1; i < n; i++ {
		n2 := 2 * data[a]
		n3 := 3 * data[b]
		n5 := 5 * data[c]
		data[i] = Min(Min(n2, n3), n5)
		if data[i] == n2 {
			a++
		}
		if data[i] == n3 {
			b++
		}
		if data[i] == n5 {
			c++
		}
	}
	return data[n-1]
}

func Min(a, b int) int {
	if a < b {
		return a
	}
	return b
}

func main() {
	res := nthUglyNumber(15)
	println(res)
}
